package pkg

import (
	"errors"
	"github.com/golang-jwt/jwt/v4"
	"time"
	"usershop/api/appconfig"
)

// @secretKey: JWT 加解密密钥
// @iat: 时间戳
// @seconds: 过期时间，单位秒
// @payload: 数据载体
func GetJwtToken(payload string) (string, error) {
	jwtConf := appconfig.AppData.JwtConfig //动态配置

	secretKey := jwtConf.AccessSecret // JWT 加解密密钥
	iat := time.Now().Unix()          //时间戳
	seconds := jwtConf.AccessExpire   //过期时间，单位秒

	claims := make(jwt.MapClaims)
	claims["exp"] = iat + seconds
	claims["iat"] = iat
	claims["payload"] = payload
	token := jwt.New(jwt.SigningMethodHS256)
	token.Claims = claims
	return token.SignedString([]byte(secretKey))
}

func ParserJwtToken(tokenString string) (string, error) {
	jwtConf := appconfig.AppData.JwtConfig //动态配置
	secrtkey := jwtConf.AccessSecret

	//jwt.Parse()  在这复制这段
	token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
		return []byte(secrtkey), nil
	})

	if err != nil { //判断错误
		return "", errors.New("token解析失败")
	}

	if !token.Valid { //判断token里面是否有值
		return "", errors.New("token 失效")
	}

	if claims, ok := token.Claims.(jwt.MapClaims); ok {
		return claims["payload"].(string), nil
	}
	return "", errors.New("获取参数失败")
}
